/**
 * 加解密工具包
 *
 * @author will
 * @site https://proxy.jdyd.xyz
 * @date 2021/5/16 17:35
 */
import { SM4 } from 'gm-crypto'
import { useOem } from '@/store/modules/oem'
import store from 'store'
let HEX_KEY : any = null

// 字符串转16进制
function str2hex(str) {
  var val = ''
  for (var i = 0; i < str.length; i++) {
      if (val == '')
          val = str.charCodeAt(i).toString(16)
      else
          val += str.charCodeAt(i).toString(16)
  }
  val += ''
  return val
}

// 获取hex秘钥
function getHexKey(){ 
  // if(!HEX_KEY){
  //   HEX_KEY = str2hex(useOem().dynamicKey.dataKey)
  // }
  return str2hex(store.get('dynamicKey')?.dataKey)
}


// 解密 (http响应数据， 做通用处理)
export function sm4DecryptByResData(data){
  if(!data){
    return data
  }
  let res = SM4.decrypt(data, getHexKey(), {
    inputEncoding: 'base64',
    outputEncoding: 'utf8'
  })

  if(!res){
    return res
  }

  return JSON.parse(res)['originData'] || JSON.parse(res)
}

// 解密(http请求数据，做通用处理)
// export function sm4DecryptByReqData(data){
//   let data1 = JSON.parse(data)
//   if(!data1){
//     return data1
//   }

//   let res = SM4.decrypt(data1, getHexKey(), {
//     inputEncoding: 'base64',
//     outputEncoding: 'utf8'
//   })

//   if(!res){
//     return res
//   }

//   return JSON.parse(res)['originData']
// }


// 加密 (http响应数据， 做通用处理)
export function sm4EncryptByReqData(data){

  if(!data){
    return data
  }

  // 加密处理
  let encryptData = SM4.encrypt(JSON.stringify(data), getHexKey(), {
    inputEncoding: 'utf8',
    outputEncoding: 'base64'
  })

  return {encryptData : encryptData}
}

// 更新store里面的版本号和密钥
export function updateStoreVersionAndKey(dynamicKey:any){
  useOem().setSecretKey({
    version:dynamicKey.version,
    dataKey:dynamicKey?.dataKey
  })
  
}